/********************************************************************************
    * 文件名称 ：lcd.h
    * 作     者：小熊派开源社区
    * 版     本：V1.0
    * 编写日期 ：2018-4-1
    * 功     能：LCD屏幕驱动
*********************************************************************************
    * 说    明 ：本例程配套小熊派开源社区开发板使用
    *
    * 淘     宝：https://shop336827451.taobao.com/
    * 论     坛：https://bbs.huaweicloud.com/forum/forum-734-1.html
    * 微信公众号：小熊派开源社区
*********************************************************************************/
#ifndef __LCD_H
#define __LCD_H
#include "stm32l4xx_hal.h"


extern uint16_t POINT_COLOR;        //Default brush color
extern uint16_t BACK_COLOR;        //Default background color

//Width and height definitions of LCD
#define LCD_Width   240
#define LCD_Height  240

//Brush color
#define WHITE           0xFFFF
#define BLACK           0x0000      
#define BLUE            0x001F  
#define BRED            0XF81F
#define GRED            0XFFE0
#define GBLUE           0X07FF
#define RED             0xF800
#define MAGENTA         0xF81F
#define GREEN           0x07E0
#define CYAN            0x7FFF
#define YELLOW          0xFFE0 //黄色
#define BROWN           0XBC40 //棕色
#define BRRED           0XFC07 //棕红色
#define GRAY            0X8430 //灰色
#define DARKBLUE        0X01CF    //深蓝色
#define LIGHTBLUE       0X7D7C    //浅蓝色  
#define GRAYBLUE        0X5458 //灰蓝色
#define LIGHTGREEN      0X841F //浅绿色
#define LGRAY           0XC618 //浅灰色(PANNEL),窗体背景色
#define LGRAYBLUE       0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE          0X2B12 //浅棕蓝色(选择条目的反色)



/*
    LCD_PWR:    PB15
    LCD_RST:    PC7
    LCD_DC:        PC6
*/
#define LCD_PWR(n)   (n?HAL_GPIO_WritePin(LCD_POWER_GPIO_Port,LCD_POWER_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(LCD_POWER_GPIO_Port,LCD_POWER_Pin,GPIO_PIN_RESET))
#define LCD_RST(n)   (n?HAL_GPIO_WritePin(LCD_RESET_GPIO_Port,LCD_RESET_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(LCD_RESET_GPIO_Port,LCD_RESET_Pin,GPIO_PIN_RESET))
#define LCD_DC(n)    (n?HAL_GPIO_WritePin(LCD_WR_RS_GPIO_Port,LCD_WR_RS_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(LCD_WR_RS_GPIO_Port,LCD_WR_RS_Pin,GPIO_PIN_RESET))


void LCD_Init(void);                                                                    //Init
void LCD_DisplayOn(void);                                                                //Open display
void LCD_DisplayOff(void);                                                                //Close display
void LCD_Write_HalfWord(const uint16_t da);                                                //Write half a byte of data to LCD
void LCD_Address_Set(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);                //Setting up the data display area
void LCD_Clear(uint16_t color);                                                            //Clean screen
void LCD_Fill(uint16_t x_start, uint16_t y_start, uint16_t x_end, uint16_t y_end, uint16_t color);                //Filled monochrome
void LCD_Draw_Point(uint16_t x, uint16_t y);                                                        //Draw points
void LCD_Draw_ColorPoint(uint16_t x, uint16_t y, uint16_t color);                                        //Painting with color dots
void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);                                        //Draw line
void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);                                    //Draw rectangle
void LCD_Draw_Circle(uint16_t x0, uint16_t y0, uint8_t r);                                                //Circle drawing
void LCD_ShowChar(uint16_t x, uint16_t y, char chr, uint8_t size);                                        //Display a character
void LCD_ShowNum(uint16_t x, uint16_t y, uint32_t num, uint8_t len, uint8_t size);                                    //Display a number
void LCD_ShowxNum(uint16_t x, uint16_t y, uint32_t num, uint8_t len, uint8_t size, uint8_t mode);                            //Display number
void LCD_ShowString(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t size, char *p);                    //display string
void LCD_Show_Image(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint8_t *p);                    //display picture
void PutChinese_strings(uint16_t Xpos, uint16_t Ypos, uint8_t *str, uint8_t mode);

#endif


